package com.smh.demo1.a37;

import org.springframework.context.annotation.AnnotationConfigUtils;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.GenericApplicationContext;

/**
 * @author shiminghui
 * @date 2025/5/9 19:39
 * @description: TODO
 */
public class A37 {
    public static void main(String[] args) {

        GenericApplicationContext context = new GenericApplicationContext();
        // 注册一些常用的BeanFactory和Bean后处理器
        AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
        context.registerBean("config", MyConfig.class);
        context.refresh();

        // 打印BeanDefinition
        String[] beanDefinitionNames = context.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }

        // 可以发现Bean2是由FactoryBean创建的,spring不会为其执行依赖注入,和aware接口调用
        // 但是spring也不是全不管,它提供了初始化后的增强,如(代理)
        // 并且,当你尝试获取FactoryBean2时,根据名字获取的是Bean2,你需要在名字前加一个&,
        // 而且这个Bean2不是放在一级缓存里面,而是放在一个factoryBeanObjectCache里面
        Bean2 bean2 = context.getBean("bean2", Bean2.class);
        System.out.println(bean2);

    }

    @ComponentScan
    @Configuration
    static class MyConfig {

    }

}
